package com.gateway.service.impl;

import com.gateway.api.config.ApiConfig;
import com.gateway.api.domain.vo.ApiInfo;
import com.gateway.api.util.BeanUtil;
import com.gateway.dao.mapper.ApiInfoDao;
import com.gateway.service.ApiService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service("apiService")
@Slf4j
public class ApiServiceImpl implements ApiService {

    @Autowired
    private ApiInfoDao apiInfoDao;


    @Override
    public ApiInfo getTargetURLFromCache(String requestURI) {
        ApiConfig config = BeanUtil.getBean(ApiConfig.class);
        return config.getApiInfoByRequestURL(requestURI);
    }

    @Override
    public boolean checkApiInfoIsExistsFromCache(String checkUrl) {
        ApiConfig config = BeanUtil.getBean(ApiConfig.class);
        return config.getApiInfoByRequestURL(checkUrl)!=null;
    }

    @Override
    public List<ApiInfo> getAllFromCache() {
        ApiConfig config = BeanUtil.getBean(ApiConfig.class);
        return config.getAll();
    }

    public boolean add(ApiInfo apiInfo){
        return apiInfoDao.insert(apiInfo)>0;
    }

    @Override
    public boolean update(ApiInfo apiInfo) {
        return apiInfoDao.updateByPrimaryKeySelective(apiInfo)>0;
    }

    @Override
    public ApiInfo getApiInfoById(String apiId) {
        ApiInfo apiInfo = new ApiInfo();
        apiInfo.setId(Integer.parseInt(apiId));
        return apiInfoDao.selectByPrimaryKey(apiInfo);
    }

    @Override
    public void updateStatus(String apiIds, String status) {
        Map<String,String> param = new HashMap<>();
        param.put("apiIds",apiIds);
        param.put("status",status);
        apiInfoDao.updateStatus(param);
    }

    @Override
    public List<ApiInfo> getAll() {
        return apiInfoDao.selectAll();
    }

}
